
package com.udc.medLine.transaction;

import java.util.List;

import com.udc.medLine.entity.CondicaoVO;
import com.udc.medLine.entity.Conveniencia;
import com.udc.medLine.entity.Item;
import com.udc.medLine.entity.Medicamento;
import com.udc.medLine.entity.Produto;
import com.udc.medLine.entity.TipoItem;
import com.udc.medLine.factory.FactoryConveniencia;
import com.udc.medLine.factory.FactoryItem;
import com.udc.medLine.factory.FactoryMedicamento;
import com.udc.medLine.factory.FactoryTipoItem;
import com.udc.medLine.persistence.Bd;

public class TransactionItem {

	private Item item;
	private TipoItem tipoItem;
	private Conveniencia conveniencia;
	private Medicamento medicamento;
	
	private List produtos;		
	private List tipoItens;
	private List itens;
	
	private Bd banco;
	
	/**
	 * 
	 */
	public TransactionItem() {
		super();
		item = new Item();
		try{
			banco = Bd.getInstance();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		// TODO Stub de construtor gerado automaticamente
	}

	public Item getItem() {
		return item;
	}

	public void setItem(Item new_item) {
		this.item = new_item;
	}

	public void remover(Item nItem) throws Exception {
		banco.beginTransaction();
			FactoryItem factory = new FactoryItem();
			item.setId(nItem.getId());
			factory.setItem(item);
			factory.delete();
		banco.commit();
	}

	public void inserir(Item nItem) throws Exception {
		banco.beginTransaction();
			FactoryItem factory = new FactoryItem();
			FactoryTipoItem factoryTipoItem = new FactoryTipoItem();
			FactoryConveniencia factoryConveniencia = new FactoryConveniencia();
			FactoryMedicamento factoryMedicamento = new FactoryMedicamento();
		
			tipoItem.setId(nItem.getTipoItem().getId());
			factoryTipoItem.setTipoItem(tipoItem);
			tipoItem = factoryTipoItem.obterTipoItem();
			
			if(Produto.CONVENIENCIA.equals(tipoItem.getNome())){
				
				conveniencia.setId(nItem.getConveniencia().getId());
				factoryConveniencia.setConveniencia(conveniencia);
				conveniencia = factoryConveniencia.obterConveniencia();		
				item.setConveniencia(conveniencia);
			}else{
				
				medicamento.setId(nItem.getMedicamento().getId());
				factoryMedicamento.setMedicamento(medicamento);
				medicamento = factoryMedicamento.obterMedicamento();
				item.setMedicamento(medicamento);
				
			}
			item.setTipoItem(tipoItem);
			
			factory.setItem(item);
			factory.insert();
		banco.commit();
	}

	public void atualizar(Item nItem) throws Exception {
		banco.beginTransaction();
		FactoryItem factory = new FactoryItem();
		FactoryTipoItem factoryTipoItem = new FactoryTipoItem();
		FactoryConveniencia factoryConveniencia = new FactoryConveniencia();
		FactoryMedicamento factoryMedicamento = new FactoryMedicamento();
	
		tipoItem.setId(nItem.getTipoItem().getId());
		factoryTipoItem.setTipoItem(tipoItem);
		tipoItem = factoryTipoItem.obterTipoItem();
		
		if(Produto.CONVENIENCIA.equals(tipoItem.getNome())){
			
			conveniencia.setId(nItem.getConveniencia().getId());
			factoryConveniencia.setConveniencia(conveniencia);
			conveniencia = factoryConveniencia.obterConveniencia();		
			item.setConveniencia(conveniencia);
		}else{
			
			medicamento.setId(nItem.getMedicamento().getId());
			factoryMedicamento.setMedicamento(medicamento);
			medicamento = factoryMedicamento.obterMedicamento();
			item.setMedicamento(medicamento);
			
		}
		
		item.setId(nItem.getId());
		item.setTipoItem(tipoItem);
		
		factory.setItem(item);
		factory.update();
		banco.commit();
	}


	public void obterItem(String campo, String valor) throws Exception{
		banco.beginTransaction();
			FactoryItem factory = new FactoryItem();
			factory.setItem(new Item());
			itens = factory.getItem(campo,valor);
		banco.commit();
	}
	
	public void obterListaItem() throws Exception{
		banco.beginTransaction();
			FactoryItem factory = new FactoryItem();
			factory.setItem(new Item());
			itens = factory.getListaItem();
		banco.commit();
	}
	
	public void obterItem(Item nItem) throws Exception{
		banco.beginTransaction();
			FactoryItem factory = new FactoryItem();
			item.setId(nItem.getId());
			factory.setItem(item);
			item = factory.obterItem();
		banco.commit();
	}
	
	/**
	 * @return the conveniencia
	 */
	public Conveniencia getConveniencia() {
		return conveniencia;
	}

	/**
	 * @param conveniencia the conveniencia to set
	 */
	public void setConveniencia(Conveniencia conveniencia) {
		this.conveniencia = conveniencia;
	}

	/**
	 * @return the medicamento
	 */
	public Medicamento getMedicamento() {
		return medicamento;
	}

	/**
	 * @param medicamento the medicamento to set
	 */
	public void setMedicamento(Medicamento medicamento) {
		this.medicamento = medicamento;
	}

	/**
	 * @return
	 */
	public List getItens() {
		return itens;
	}

	/**
	 * @param list
	 */
	public void setItens(List list) {
		itens = list;
	}
	/**
	 * @return the tipoItem
	 */
	public TipoItem getTipoItem() {
		return tipoItem;
	}

	/**
	 * @param tipoItem the tipoItem to set
	 */
	public void setTipoItem(TipoItem tipoItem) {
		this.tipoItem = tipoItem;
	}

	/**
	 * @return the produtos
	 */
	public List getProdutos() {
		return produtos;
	}

	/**
	 * @param produtos the produtos to set
	 */
	public void setProdutos(List produtos) {
		this.produtos = produtos;
	}

	/**
	 * @return the tipoItens
	 */
	public List getTipoItens() {
		return tipoItens;
	}

	/**
	 * @param tipoItens the tipoItens to set
	 */
	public void setTipoItens(List tipoItens) {
		this.tipoItens = tipoItens;
	}

	public List<Item> search(CondicaoVO condicao) throws Exception {
		banco.beginTransaction();
		FactoryItem factory = new FactoryItem();
		itens = factory.search(condicao);
		banco.commit();
		return itens;
	}

}
